package de.tsystems.dict.api.impl;

import de.tsystems.dict.model.Identifiable;

import java.io.Serializable;
import java.util.List;

/**
 * Обший интерфейс для Dao объектов
 */
public interface Dao<T extends Identifiable> {
    /**
     * Искать по ключевому полю
     *
     * @param id - идентификатор
     * @return T
     */
    T getById(Serializable id);

    List<T> listAll();

    /**
     * Сохранение в БД объекта данной сущности
     *
     * @param entity
     */
    T save(T entity);

    /**
     * Удаление из БД объекта данной сущности
     *
     * @param t удаляемый объект
     */
    void delete(T t);

    /**
     * Редактирование в БД объекта данной сущности
     *
     * @param t редактируемый объект
     */
    void update(T t);

    /**
     * @return класс сущности
     */
    Class<T> getEntityClass();

    void remove(T t);
}
